package E_2024;

import java.util.*;

/*
题目描述

    给定一个字符串的摘要算法，请输出给定字符串的摘要值

    1.去除字符串中非字母的符号。

    2.如果出现连续字符(不区分大小写),则输出：该字符(小写)+连续出现的次数。

    3.如果是非连续的字符(不区分大小写),则输出：该字符(小写)+该字母之后字符串中出现的该字符的次数

    4.对按照以上方式表示后的字符串进行排序：字母和紧随的数字作为一组进行排序，数字大的在前，数字相同的，则按字母进行排序，字母小的在前。

输入描述

    一行字符串，长度为[1,200]

输出描述

    摘要字符串


 */
public class E_100_45 {
    public static void main(String[] args) {
        System.out.println(ans("bAaAcBb"));
        System.out.println(ans("aabbcc"));
    }
    public static String ans(String str){
        Map<Character, Integer> map0 = new HashMap<>();
        Map<Character, Integer> map1 = new HashMap<>();
        List<Integer[]> list = new ArrayList<>();
        boolean right = false;
        str = str.toLowerCase();
        for (int i = str.length() - 1; i > 0; i--) {
            char ch = str.charAt(i);
            if (str.charAt(i-1) == ch){
                map0.put(ch, map0.getOrDefault(ch,0) + 1);
                right = true;
            }else {
                if (!right)
                    list.add(new Integer[]{(int)ch,map1.getOrDefault(ch,0)});
                else {
                    list.add(new Integer[]{(int)ch,map0.getOrDefault(ch,0)+1});
                    map0.put(ch,0);
                }
                right = false;
            }
            map1.put(ch, map1.getOrDefault(ch,0) + 1);
        }
        char ch = str.charAt(0);
        if (!right)
            list.add(new Integer[]{(int)ch,map1.getOrDefault(ch,0)});
        else {
            list.add(new Integer[]{(int)ch,map0.getOrDefault(ch,0)+1});
            map0.put(ch,0);
        }
        list.sort((a,b)->{
            if (Objects.equals(a[1], b[1])) return a[0] - b[0];
            else return b[1] - a[1];
        });
        StringBuilder sb = new StringBuilder();
        for (Integer[] integers : list) {
            sb.append((char)integers[0].intValue()).append(integers[1]);
        }
        return sb.toString();
    }
}
